Nonvolatile semiconductor memories use a variety of semiconductor memory cell designs. One type of memory cell uses an electrically isolated floating gate to trap charge. A variety of mechanisms can be used to insert charge into the floating gate and to pull charge from it. Electron tunneling can be used both to inject charge and to pull charge off the floating gate of a memory cell. Hot electron injection is another mechanism for inserting charge into a floating gate of a memory cell. Other nonvolatile semiconductor memories use a trapping dielectric to insert or remove charge from between the control gate of a memory cell and silicon.
For a memory cell that includes a floating gate, data is stored in the memory cell by altering the amount of charge on the floating gate, which causes the threshold voltage V.sub.t of the memory cell to be varied. A typical prior art memory cell is capable of achieving one of two possible analog states, being either "programmed" or "erased". The analog states of a memory cell may be expressed as ranges of threshold voltages V.sub.t, cell currents I.sub.d, or charge levels stored on the floating gate. Theoretically, the flash cell can possess a separate identifiable state for each electron that is added to the floating gate. Practically speaking, the maximum possible number of states for a memory cell is limited because of inconsistencies in memory cell structure, charge loss over time, thermal considerations and inaccuracies in sensing the charge on the floating gate that affect the ability to determine the data stored in the memory cell. It is possible, however, for the floating gate to achieve more than two analog states. This permits storage of multiple bits of data in a single memory cell, which is sometimes called multistate or multilevel storage.
Increasing the number of bits that are stored in a single memory cell has several consequences with respect to programming the memory cell. First, the storage of multiple bits in a memory cell typically requires a narrow range of V.sub.t voltages for each state. "Programming overshoot" thus becomes a concern, and care must be taken to precisely place the memory cell into the desired analog state. Programming overshoot occurs when the memory cell is programmed beyond the desired state. Programming overshoot is typically not a concern for prior single bit flash cells because the single bit flash cell can achieve no state beyond the programmed state.
Second, the narrow ranges of threshold voltages V.sub.t for each state and the need for accurate placement of states result in the values of the programming voltage levels being a critical parameter for accurately programming the memory cell. Typically, an external power supply is used to determine the programming voltage levels. The inaccuracy inherent in most power supplies therefore becomes troublesome. For example, the programming voltage V.sub.G that is applied to the select gate of a memory cell during programming has a one-to-one correspondence to the final threshold voltage V.sub.t of the memory cell. Any fluctuations in the programming voltage V.sub.G during a programming cycle results in corresponding fluctuations of the threshold voltage V.sub.t, and programming overshoot can occur.
One method to provide accurate programming voltage levels is to use a very high precision power supply, e.g. a power supply having a 1% setpoint accuracy level. Such power supplies are cost-prohibitive, however, and another solution would be preferable.